<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <style>
        .p1 {
            color: red;
            background-color: lightpink;
        }

        .p2 {
            color: green;
            background-color: greenyellow;
        }

        .p3 {
            color: blue;
            background-color: lightgreen;
        }

        .p1,
        .p2,
        .p3 {
            width: 50%;
        }
    </style>

    <style>
        .box {
            background: red;
            width: 100px;
            height: 100px;
            margin: 20px;
            color: white;
        }

        #one {
            position: fixed;
            top: 80px;
            left: 10px;
        }

        .outer {
            width: 500px;
            height: 300px;
            overflow: scroll;
            padding-left: 150px;
        }
    </style>
</head>

<body style="min-height: 1000px;">

    <div>
        <p>fixed</p>
        <p class="p1">paragraph1</p>
        <p class="p2" style="position: fixed; left: 10px; top: 10px;">paragraph2</p>
        <p class="p3">paragraph3</p>
    </div>

    <!-- 绝对定位 -->
    <!-- 相对定位的元素并未脱离文档流，而绝对定位的元素则脱离了文档流。在布置文档流中其它元素时，绝对定位元素不占据空间。绝对定位元素相对于最近的非 static 祖先元素定位。当这样的祖先元素不存在时，则相对于ICB（inital container block, 初始包含块）。例子不严谨，待修正下面的示例中，"Three" 元素不存在应用了定位的祖先元素，因此该元素相对于紧邻的祖先（iframe 中的 <body> 元素）绝对定位。 -->
    <div class="outer">
        <p>
            Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam congue tortor eget pulvinar lobortis.
            Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nam ac dolor augue.
            Pellentesque mi mi, laoreet et dolor sit amet, ultrices varius risus. Nam vitae iaculis elit.
            Aliquam mollis interdum libero. Sed sodales placerat egestas. Vestibulum ut arcu aliquam purus viverra
            dictum vel sit amet mi.
            Duis nisl mauris, aliquam sit amet luctus eget, dapibus in enim. Sed velit augue, pretium a sem aliquam,
            congue porttitor tortor.
            Sed tempor nisl a lorem consequat, id maximus erat aliquet. Sed sagittis porta libero sed condimentum.
            Aliquam finibus lectus nec ante congue rutrum. Curabitur quam quam, accumsan id ultrices ultrices, tempor et
            tellus.
        </p>
        <p>
            Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam congue tortor eget pulvinar lobortis.
            Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nam ac dolor augue.
            Pellentesque mi mi, laoreet et dolor sit amet, ultrices varius risus. Nam vitae iaculis elit.
            Aliquam mollis interdum libero. Sed sodales placerat egestas. Vestibulum ut arcu aliquam purus viverra
            dictum vel sit amet mi.
            Duis nisl mauris, aliquam sit amet luctus eget, dapibus in enim. Sed velit augue, pretium a sem aliquam,
            congue porttitor tortor.
            Sed tempor nisl a lorem consequat, id maximus erat aliquet. Sed sagittis porta libero sed condimentum.
            Aliquam finibus lectus nec ante congue rutrum. Curabitur quam quam, accumsan id ultrices ultrices, tempor et
            tellus.
        </p>
        <div class="box" id="one">One</div>
    </div>

</body>

</html>

<!-- CSS 布局 -->
<!-- https://developer.mozilla.org/zh-CN/docs/Learn/CSS/CSS_layout -->

<!-- 定位 -->
<!-- 定位允许您从正常的文档流布局中取出元素，并使它们具有不同的行为，例如放在另一个元素的上面，或者始终保持在浏览器视窗内的同一位置。 -->
<!-- 静态定位 -->
<!-- https://developer.mozilla.org/zh-CN/docs/Learn/CSS/CSS_layout/Positioning#%E9%9D%99%E6%80%81%E5%AE%9A%E4%BD%8D -->
<!-- 静态定位是每个元素获取的默认值——它只是意味着“将元素放入它在文档布局流中的正常位置 ——这里没有什么特别的。 -->
<!-- 相对定位 -->
<!-- https://developer.mozilla.org/zh-CN/docs/Learn/CSS/CSS_layout/Positioning#%E7%9B%B8%E5%AF%B9%E5%AE%9A%E4%BD%8D -->
<!-- 相对定位是我们将要看的第一个位置类型。 它与静态定位非常相似，占据在正常的文档流中，除了你仍然可以修改它的最终位置，包括让它与页面上的其他元素重叠。 -->
<!-- 绝对定位 -->
<!-- https://developer.mozilla.org/zh-CN/docs/Learn/CSS/CSS_layout/Positioning#absolute_positioning -->
<!-- 首先，请注意，定位的元素应该在文档流中的间隙不再存在——第一和第三元素已经靠在一起，就像第二个元素不再存在！ -->
<!-- 第二，注意元素的位置已经改变——这是因为top，bottom，left和right以不同的方式在绝对定位。 -->
<!-- 固定定位 -->
<!-- 这与绝对定位的工作方式完全相同，只有一个主要区别：绝对定位固定元素是相对于 <html> 元素或其最近的定位祖先，而固定定位固定元素则是相对于浏览器视口本身。 -->



<!-- position -->
<!-- https://developer.mozilla.org/zh-CN/docs/Web/CSS/position -->
<!-- static -->
<!-- 该关键字指定元素使用正常的布局行为，即元素在文档常规流中当前的布局位置。此时 top, right, bottom, left 和 z-index 属性无效。 -->
<!-- relative -->
<!-- 该关键字下，元素先放置在未添加定位时的位置，再在不改变页面布局的前提下调整元素位置（因此会在此元素未添加定位时所在位置留下空白）。position:relative 对 table-*-group, table-row, table-column, table-cell, table-caption 元素无效。 -->
<!-- absolute -->
<!-- 元素会被移出正常文档流，并不为元素预留空间，通过指定元素相对于最近的非 static 定位祖先元素的偏移，来确定元素位置。绝对定位的元素可以设置外边距（margins），且不会与其他边距合并。 -->
<!-- fixed -->
<!-- 元素会被移出正常文档流，并不为元素预留空间，而是通过指定元素相对于屏幕视口（viewport）的位置来指定元素位置。元素的位置在屏幕滚动时不会改变。打印时，元素会出现在的每页的固定位置。fixed 属性会创建新的层叠上下文。当元素祖先的 transform, perspective 或 filter 属性非 none 时，容器由视口改为该祖先。 -->